package back;

/**
 * Clase Jugador que implementa la interfaz Movible y Elemento
 * permite definir el comportamiento de una Jugador
 */

public class Jugador implements Movible, Elemento {

	private String nombre;
	private Coordenada posicion;
	private int movimientos=0;

	/**
	 * Constructor de la clase Jugador.
	 * Modifica la variable nombre con el nombre del jugador
	 * @param String nombre del jugador
	 */
	
	public Jugador(String nombre){
		this.nombre=nombre;
	}
	
	/**
	 * Setea la coordenada del jugador
	 * @param Coordenada coor nueva coordenada del jugador
	 */

	public void setPos(Coordenada coor){
		this.posicion=coor;
	}
		
	/**
	 * Retorna el nombre del jugador
	 * @return String nombre del jugador
	 */
	
	public String nombreJugador(){
		return nombre;
	}
	
	/**
	 * Retorna la coordenada del jugador
	 * @return Coordenada posicion coordenada del jugador.
	 */
	public Coordenada posicion(){
		return this.posicion;
	}
	
	/**
	 * Mueve al jugador desde celdaOrigen en la direccion
	 * pasada como parametro.
	 * Setea las variables movibles del origen y destino.
	 * @param Celda celdaOrigen celda desde donde se va a mover el jugador.
	 * @param int direccion con la que se va a mover el jugador
	 */

	public void mueve(Celda celdaOrigen, int direccion) {

		Celda celdaDestino=celdaOrigen.getCeldaHacia(direccion);
		this.setPos(celdaDestino.getPosicion());
		celdaDestino.getMovible().mueve(celdaDestino, direccion);
		celdaDestino.pongoMovible(this);
		celdaOrigen.pongoMovible(new VacioM());
		movimientos++;
		
	}

	/**
	 * Retorna la cantidad de movimientos realizados por el jugador
	 * @return int movimientos hechos por el jugador. 
	 */
	
	public int getMovimientos() {
		return this.movimientos;
	}
	
	/**
	 * Setea la cantidad de movimientos realizados por el jugador
	 * @param int movimientos nueva cantidad de movimientos. 
	 */

	public void setMovimientos(int mov) {
		this.movimientos=mov;
		
	}

	/**
	 * Retorna true si es posible moverse
	 * @param int direccion del movimiento que se quiere realizar
	 * @param Celda destino
	 * @return boolean
	 */

	public boolean posibleMov(int direccion, Celda destino) {
		return destino.posibleMovida(direccion);
	}

	/**
	 * Elimina a jugador de la celda pasada como parametro
	 * @param Celda celda
	 */
	
	public void eliminar(Celda celda) {
		celda.setMovible(new VacioM());
		celda.muere();
		
	}

	/**
	 * Agrega a el jugador en la celda pasada como parametro
	 * @Celda celda
	 */
	
	public void agrego(Celda celda) {
		this.setPos(celda.getPosicion());
		celda.setMovible(this);
		celda.getTablero().setJugador(celda.getPosicion());
				
	}

	
}